package com.chenyue.cm.live.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
 * @author libingxing
 */
@Data
public class MixStreamParam {

    /**
     * 公共参数，本接口取值：CreateCommonMixStream。
     */
    private String Action = "CreateCommonMixStream";

    /**
     * 公共参数，本接口取值：2018-08-01。
     */
    private String Version = "2018-08-01";

    /**
     * 混流会话（申请混流开始到取消混流结束）标识 ID。80字节以内，仅含字母、数字以及下划线的字符串。
     */
    private String MixStreamSessionId;

    /**
     * 混流输入流列表
     */
    private List<InputStream> InputStreamList;

    /**
     * 混流输出流参数
     */
    private OutputParam OutputParams;

    @Data
    static class CommonMixCropParams {

        @ApiModelProperty("裁剪宽度")
        private Float CropWidth;

        @ApiModelProperty("裁剪高度")
        private Float CropHeight;

        @ApiModelProperty("裁剪起始X坐标")
        private Float CropStartLocationX;

        @ApiModelProperty("裁剪起始Y坐标")
        private Float CropStartLocationY;
    }

    @Data
    static class InputStream {

        @ApiModelProperty("输入流名称")
        private String InputStreamName;

        private LayoutParam LayoutParams;

        /**
         * 裁剪参数
         */
        private CommonMixCropParams CropParams;
    }

    @Data
    static class LayoutParam {

        @ApiModelProperty("" +
                "输入图层。取值范围[1，16]。\n" +
                "1)背景流（即大主播画面或画布）的 image_layer 填1。\n" +
                "2)纯音频混流，该参数也需填。")
        private Integer ImageLayer;

        @ApiModelProperty("输入类型。取值范围[0，5]。\n" +
                "不填默认为0。\n" +
                "0表示输入流为音视频。\n" +
                "2表示输入流为图片。\n" +
                "3表示输入流为画布。 \n" +
                "4表示输入流为音频。\n" +
                "5表示输入流为纯视频。")
        private Integer InputType;

        @ApiModelProperty("输入画面在输出时的高度。取值范围：\n" +
                "像素：[0，2000]\n" +
                "百分比：[0.01，0.99]\n" +
                "不填默认为输入流的高度。\n" +
                "使用百分比时，期望输出为（百分比 * 背景高）。")
        private Float ImageHeight;

        @ApiModelProperty("输入画面在输出时的宽度。取值范围：\n" +
                "像素：[0，2000]\n" +
                "百分比：[0.01，0.99]\n" +
                "不填默认为输入流的宽度。\n" +
                "使用百分比时，期望输出为（百分比 * 背景宽）。")
        private Float ImageWidth;

        @ApiModelProperty("输入在输出画面的X偏移。取值范围：\n" +
                "像素：[0，2000]\n" +
                "百分比：[0.01，0.99]\n" +
                "不填默认为0。\n" +
                "相对于大主播背景画面左上角的横向偏移。 \n" +
                "使用百分比时，期望输出为（百分比 * 背景宽）。")
        private Float LocationX;

        @ApiModelProperty("输入在输出画面的Y偏移。取值范围：\n" +
                "像素：[0，2000]\n" +
                "百分比：[0.01，0.99]\n" +
                "不填默认为0。\n" +
                "相对于大主播背景画面左上角的纵向偏移。 \n" +
                "使用百分比时，期望输出为（百分比 * 背景宽）")
        private Float LocationY;

        @ApiModelProperty("当InputType为3(画布)时，该值表示画布的颜色。\n" +
                "常用的颜色有：\n" +
                "红色：0xcc0033。\n" +
                "黄色：0xcc9900。\n" +
                "绿色：0xcccc33。\n" +
                "蓝色：0x99CCFF。\n" +
                "黑色：0x000000。\n" +
                "白色：0xFFFFFF。\n" +
                "灰色：0x999999。")
        private Float Color;

        @ApiModelProperty("当InputType为2(图片)时，该值是水印ID。")
        private Float WatermarkId;
    }

    @Data
    static class OutputParam {

        @ApiModelProperty("输出流名称")
        private String OutputStreamName;
    }

}
